package com.element.security.resource.service;

import com.element.security.server.config.TokenStoreConfig;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;

/**
 * @auther WuJun.Zhang
 * @date 2022/3/31 下午5:34
 */
@Component(value = "redisAuthTokenService")
public class RedisAuthTokenService {

    @Resource
    private TokenStoreConfig tokenStoreConfig;

    public void resetToKen(String appId, List<String> userIds) {
        if (CollectionUtils.isEmpty(userIds)) {
            return;
        }
        TokenStore tokenStore = tokenStoreConfig.getTokenStore();
        userIds.forEach(userId -> reset(tokenStore, appId, userId));
    }

    public void resetToKen(String appId, String userId) {
        TokenStore tokenStore = tokenStoreConfig.getTokenStore();
        reset(tokenStore, appId, userId);
    }

    private void reset(TokenStore tokenStore, String appId, String userId) {
        Collection<OAuth2AccessToken> collection = tokenStore.findTokensByClientIdAndUserName(appId, userId);
        if (CollectionUtils.isEmpty(collection)) {
            return;
        }
        collection.forEach(tokenStore::removeAccessToken);
    }
}